import "reflect-metadata";
import {createConnection, getConnection, getManager, getRepository} from "typeorm";
import {Posts} from "./entity/Posts";
import {User} from "./entity/User";

createConnection().then(async connection => {
    //// 1.使用connection创建
    // const user = await getConnection()
    //     .createQueryBuilder()
    //     .select(['user.id', 'user.username']) // 需要选择查询的字段,如果想要全部查询可以不加select
    //     .from(User, 'user') // 从哪张表,并且定义别名为user
    //     .where('(user.id=:id)', {id: 2}) // 过滤条件
    //     .getOne(); // 查询一个
    // console.log(user);

    // 2.使用connection创建
    // const user = await getConnection()
    //     .createQueryBuilder(User, 'user')
    //     .select(['user.id', 'user.username'])
    //     .where('(user.id=:id)', {id: 3})
    //     .getOne();
    // console.log(user);

    // // 3.使用entity manager创建
    // const user = await getManager()
    //     .createQueryBuilder(User, 'user')
    //     .select('user')
    //     .getMany();
    // console.log(user);

    // 4.使用repository创建
    // const user = await getRepository(User)
    //     .createQueryBuilder('user')
    //     .getMany();
    // console.log(user);

    // ========= QueryBuilder 的五种类型   ====================================
    // 1. 查询数据
    // 2. 插入数据
    // 3. 更新数据
    // 4. 删除数据
    // 5. 创建关联查询

    // 1.查询数据
    // const user = await getConnection()
    //     .createQueryBuilder(User, 'user')
    //     .select(['user.id', 'user.username'])
    //     .where('(user.id=:id)', {id: 2})
    //     .getOne();
    // console.log(user);

    // // 插入数据
    // const result = await getConnection()
    //     .createQueryBuilder()
    //     .insert()
    //     .into(User) // 插入数据的时候要指明插入到那个实体类
    //     .values([{username: '张三', password: '1234'}, {username: '李四', password: '12345'}])
    //     .execute();
    // console.log(result);

    //3. 更新数据
    // const result = await getConnection()
    //     .createQueryBuilder()
    //     .update(User)
    //     .set({ username: '哈哈哈' })
    //     .where('id=:id', { id: 2 })
    //     .execute();
    // console.log(result);

    // // 4. 删除数据
    // const result = await getConnection()
    //     .createQueryBuilder()
    //     .delete()
    //     .from(User)
    //     .where('id=:id', { id: 18 })
    //     .execute();
    // console.log(result);


    //5. 创建关系查询
    // const result = await getConnection()
    //     .createQueryBuilder(User, 'user')
    //     // 第一个参数是定义字段,第二个实体类,第三个是别名,第四个是条件
    //     .leftJoinAndMapMany('user.posts', Posts, 'posts', 'user.id=posts.userId')
    //     .getMany();
    // console.log(JSON.stringify(result));
}).catch(error => console.log(error));
